package com.review.day02;
/**
 *  普通类  √
 *  抽象类 =抽象方法     关键字 abstract
 *  只有行为的概念，没有具体的实现行为
 *
 *  与面向对象当中的多态有绝对关系
 *  产生子类【实现类】同时具备实现的属性和方法
 *
 *  什么情况下使用？
 *  复杂项目时，需要在不同的类中实现，不同功能，首选抽象类【Android常用】
 *
 *  定义抽象类：
 *  修饰符 abstract class 类名    抽象类本身没有任何意义
 *  创建抽象类同时必须存在抽象方法
 *  修饰符 abstract 返回值 方法名();   定义抽象的方法，提供给子类使用
 *
 *  抽象类如何实例化：
 *  必须使用多态，向上造型，自身无法实例化，子类【实现类】
 *  定义 使用 注意
 *
 *  抽象类使用注意：抽象类和抽象方法必须使用abstract关键字修饰
 *                可以定义静态属性，静态方法，不可以定义抽象属性
 *                可以存在构造器，不可以定义静态抽象方法，静态抽象属性
 *                可以存在内部类：静态内部类 抽象类继承抽象类
 *                Java只允许单继承，实现只需要继承子抽象类
 *                final 不能修饰抽象方法
 */
abstract class Animals{   //①可以使用static修饰
    //类定义：修饰符【abstract static】class 类名{}
      public abstract void say();   //抽象方法，没有任何实现
    //②定义修饰final[锁死]的抽象方法   ×
   // public final abstract void sleep();
    //③定义抽象属性|定义静态属性     √
    //abstract int i;
    static int i; //声明未赋值
    //④定义抽象静态属性    √
    //abstract static int j;
    //⑤定义静态抽象方法 × 语法：修饰符【static|abstract】 返回值 方法名
    //public static abstract void eat()；
    //⑥定义静态方法 √  需要加{} 一定空
    public static void eat(){};
    //⑦可以存在静态内部类吗  √
    public static class Sos{}
    //⑧构造器--抽象类构造器存在？ √
    public Animals() {
    }
    //⑨抽象类可以继承抽象类  √
    abstract class Thing extends Animals{
        //成员变量
       protected abstract int result();
    //实现类 子类 继承 抽象类 完成：抽象类方法
    //⑩实现类【子类】继承俩抽象类   x   但是，实现最终继承【子】抽象类
    class People extends Animals{

        @Override
        public void say() {
            System.out.println();
        }
    }
    }
}
//实现类：子类 继承 抽象类 完成：抽象类方法 请问：子类需要实现抽象类全部方法
class People extends Animals{

    @Override
    public void say() {
        System.out.println("人~~~说话~~");
    }
}
//实现类
class Monkey extends Animals{

    @Override
    public  void say() {
        System.out.println("猴~~~说话~~");
    }
}
public class 抽象类 {
    public static void main(String[] args) {
        //抽象--实例化【创建对象：不能直接创建】--多态 向上造型
        Animals a=new People();
        a.say();//输出：重写后的值 方法互通

        Animals a1=new Monkey();
        a1.say();
    }
}
